<?php
namespace ZyucMini\Core;

/**
 * 配置类
 * 
 * @package ZyucMini\Core
 */
class Config
{
    /**
     * 配置项
     * @var array
     */
    private static $items = [];

    /**
     * 设置配置项
     * 
     * @param string $key
     * @param mixed $value
     */
    public static function set($key, $value)
    {
        self::$items[$key] = $value;
    }

    /**
     * 获取配置项
     * 
     * @param string $key
     * @param mixed $default
     * @return mixed
     */
    public static function get($key, $default = null)
    {
        return self::$items[$key] ?? $default;
    }

    /**
     * 加载配置文件
     * 
     * @param string $filePath
     * @return void
     * @throws \Exception
     */
    public static function load($filePath) {
        if (!file_exists($filePath)) {
            throw new \Exception("ZyucMini\Core\Config Error: file not found: $filePath");
        }
        $config = require_once $filePath;
        if (!is_array($config)) {
            throw new \Exception("ZyucMini\Core\Config Error file must return an array: $filePath");
        }
        self::$items = array_merge(self::$items, $config);
    }

    /**
     * 获取所有配置项
     * 
     * @return array
     */
    public static function all() {
        return self::$items;
    }

    /**
     * 清空所有配置项
     * 
     * @return void
     */
    public static function clear() {
        self::$items = [];
    }

    /**
     * 删除配置项
     * 
     * @return void
     */
    public static function remove($key) {
        unset(self::$items[$key]);
    }
}